#ifndef WINDOW_H
#define WINDOW_H

#include "Core/Base.h"

namespace CC {

	struct WindowProps
	{
		std::string Title;
		uint32_t Width;
		uint32_t Height;
        bool Floating;//top window
        bool HasTitle;

		WindowProps(const std::string& title = "Smale Engine",
			        uint32_t width = 800,
			        uint32_t height = 600,
            bool floating = false,
            bool hasTitle = true)
			: Title(title), Width(width), Height(height), Floating(floating), HasTitle(hasTitle)
		{
		}
	};

	// Interface representing a desktop system based Window
	class Window
	{
	public:
		virtual ~Window() = default;

		virtual void OnUpdate() = 0;

		virtual uint32_t GetWidth() const = 0;
		virtual uint32_t GetHeight() const = 0;

		// Window attributes
		virtual void SetEventCallback(const EventCallbackFn& callback) = 0;
		virtual void SetVSync(bool enabled) = 0;
		virtual bool IsVSync() const = 0;

		virtual void* GetNativeWindow() const = 0;

		virtual HWND GetNativeWindowID() const = 0;
		virtual void SetIsDesktopFlag(bool state) = 0;
		virtual void SetFullScreen() = 0;
		virtual void SetNoTitleFullScreen() = 0;

        virtual void SetWindowTitle(std::string name) = 0;

		static Window* Create(const WindowProps& props = WindowProps());
	};

}

#endif
